<?php
/**
 * index.php     ZCMS 文件操作类
 *
 * @copyright    (C) 2005 - 2010  ZCMS
 * @licenes      http://www.zcms.cc
 * @lastmodify   2010-10-27
 * @author       zhuayi
 * @QQ			 2179942
 */
class file
{
	/**
	 * 遍历文件夹
	 *
	 * @param string $filepath 文件夹路径
	 */
	function handie($filepath)
	{
		/* 打开指定文件夹 .DS_Store 是输出说有的文件 */
		$handle = opendir($filepath); 
		while (false != ($file = readdir($handle)))
		{
			if ($file != "." && $file != ".." && $file != ".DS_Store")
			{
				$files[]= $filepath.'/'.$file;
			}
		}
		closedir($handle);
		return $files;
	}
	
	/**
	 * 写入文件
	 *
	 * @param string $file 文件路径
	 * @param string $conent 文件内容
	 * @param string $w 写入
	 *  "r"		只读方式打开，将文件指针指向文件头。
		"r+"	读写方式打开，将文件指针指向文件头。
		"w"		写入方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
		"w+"	读写方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
		"a"		写入方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。
		"a+"	读写方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。
	 */
	function write($file,$conent,$w="w")
	{
		/* 获取写入文件路径，用来生成路径 */
		$filedir = str_replace(basename($file),'',$file);
		
		if (!file_exists($filedir))
		{
			$oldumask=umask(0);
			mkdir($filedir.'/',0777,true);
			chmod($filedir.'/', 0777);
			umask($oldumask);
		}
		
		$handle = fopen($file,$w);
		fwrite($handle,$conent);
		fclose($handle);
	}
	
	/**
	 * 远程下载文件
	 * @param string $url 远程地址
	 * @param string $folder 下载路径
	 */
	function down_file($url, $folder = "./")
	{
		/* 设置超时时间 */
		set_time_limit (24 * 60 * 60);
		
		/* 文件下载保存目录，默认为当前文件目录 */
		$destination_folder = $folder . '/';
		
		/* 判断目录是否存在 */
		if (!is_dir($destination_folder))
		{
			// 如果没有就建立目录 
			mkdir($destination_folder,0777,true); 
		} 
		
		/* 取得文件的名称 */
		$newfname = $destination_folder . basename($url);
		
		/* 远程下载文件，二进制模式 */
		$file = fopen ($url, "rb"); 
		
		/* 如果下载成功 */
		if ($file)
		{
			/* 远在文件文件 */
			$newf = fopen ($newfname, "wb"); 
			if ($newf)
			{
				/* 如果文件保存成功 */
				while (!feof($file))
				{
					/* 判断附件写入是否完整 */
					fwrite($newf, fread($file, 1024 * 8), 1024 * 8); 
				}
			}  
		}  
		if ($file)
		{ 
			fclose($file); // 关闭远程文件 
		}  
		if ($newf)
		{ 
			fclose($newf); // 关闭本地文件 
		}  
		return true; 
	}  
}

?>